Both hardware- and software-implemented random number generators (also referred to as random bit generators) are commonly used in computing and communication systems to generate random or pseudo-random values. For example, a typical random number generator may implement a cryptographic hash function to produce a random number (also referred to as a “hash value” or “digest”). A variety of cryptographic hash functions have been developed, including commonly-used hash functions specified by the National Institute of Standards and Technology (NIST) under the “Secure Hash Algorithm” (SHA) designation, for example.
A computing or communication system may include one or more processing entities (e.g., processor cores, encryption engines, and so on) and a random number generator, which is configured to produce random numbers (e.g., hash values) for use by the processing entities. For any of a variety of purposes, a processing entity may request a random number from the random number generator. In response to the request, the random number generator may perform multiple hashing operations, produce the random number, and update its internal working state (i.e., internally-maintained values that are initialized based on entropy and other inputs, and modified after completion of each request) to prepare for the next request. This processing may take a significant amount of time for the random number generator to complete. For example, for a conventional SHA-256 hashing engine, production of a single random value (i.e., a 256 bit value) may take upwards of 200 clock cycles to complete.
Although the amount of time required to produce a random number may have little impact on performance for some types of applications, it may present a significant performance bottleneck for other types of applications. More particularly, some applications are configured to request and use random numbers in rapid sequence. In such applications, if the rate at which the random number generator is capable of producing a random number is significantly slower than the desired rate of use by the application, the random number generator's limitations may detrimentally impact the application's performance and/or throughput. Accordingly, with the ever increasing desire to increase system performance and speed, more efficient random number generation methods and apparatus are desired.